package demo4

/*
	io.Writer 代码
		1. 这个方法接受一个 byte 切片，并返回两个值。第一个值是写入的字节数，第二个值是 error 错误值。
		2. Write 方法的实现需要试图写入被传入的 byte 切片里的所有数据。但是，如果无法全部写入，那么该方法就一定会返回一个错误。
		3. 最后，不管什么情况，都不能修改 byte 切片里的数据。
*/
type writer14 interface {
	Write(p []byte) (n int, err error)
}

/*
	io.Reader 代码
		1.  Read 最多读入 len(p) 字节，保存到 p。
		2. 当成功读取 n > 0 字节后，如果遇到错误或者文件读取完成，Read 方法会返回读入的字节数。
		3. 调用者在返回的 n > 0 时，总应该先处理读入的数据，再处理错误 err。这样才能正确操作读取一部分字节后发生的 I/O 错误。
			EOF 也要这样处理。
		4. Read 的实现不鼓励返回 0 个读取字节的同时，返回 nil 值的错误。
			调用者需要将这种返回状态视为没有做任何操作，而不是遇到读取结束。

		对应的 4 条规则
		1. 允许出现读取的字节数小于 byte 切片的长度，并且如果在读取时已经读到数据但是数据不足以填满 byte 切片时，
			不应该等待新数据，而是要直接返回已读数据。
		2. 当读到最后一个字节时，可以有两种选择。一种是 Read 返回最终读到的字节数，并且返回 EOF 作为错误值，
			另一种是返回最终读到的字节数，并返回 nil 作为错误值。
			在后一种情况下，下一次读取的时候，由于没有更多的数据可供读取，需要返回 0 作为读到的字节数，以及 EOF 作为错误值。
		3. 任何时候 Read 返回了读取的字节数，都应该优先处理这些读取到的字节，再去检查 EOF 错误值或者其他错误值。
		4. 约束建议 Read 方法的实现永远不要返回 0 个读取字节的同时返回 nil 作为错误值。如果没有读到值，Read 应该总是返回一个错误。
*/
type reader14 interface {
	Read(p []byte) (n int, err error)
}

// TestDemo414 Writer和Reader接口
func TestDemo414() {

}
